home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr34 / wcake103.zip / WINCAKE.MS_ / WINCAKE.bin
Text File  |  1993-05-01  |  14KB  |  446 lines

  1. '**************************************************************************
  2. '* $Header:   G:/SRC/WCW/MSSETUP/VCS/WINCAKE.MSV   1.7   22 May 1992 11:11:14   pws  $
  3. '*
  4. '* DESCRIPTION: MS-Setup script for Wincake and Wcwdemo.
  5. '*
  6. '* $Log:   G:/SRC/WCW/MSSETUP/VCS/WINCAKE.MSV  $
  7. '* 
  8. '*    Rev 1.7   22 May 1992 11:11:14   pws
  9. '* Demo .INI file is named WINCAKE.INI, not WCWDEMO.INI.
  10. '* 
  11. '*    Rev 1.6   13 May 1992 22:22:10   pws
  12. '* .INF filename is now always SETUP.INF.
  13. '* 
  14. '*    Rev 1.5   08 May 1992 18:28:28   gwh
  15. '* Use EXITSUCCESS_DEMO if installing Demo.
  16. '* 
  17. '*    Rev 1.4   08 May 1992 18:00:20   pws
  18. '* Support WCWDEMO.
  19. '* 
  20. '*    Rev 1.3   03 May 1992 18:51:18   pws
  21. '* Associate filetypes in Registration Database, too.
  22. '* 
  23. '*    Rev 1.2   21 Apr 1992 00:37:36   pws
  24. '* Added filetype associations for .WRK, .MID, & .MFF to WIN.INI,
  25. '* obtaining user confirmation when desirable.
  26. '* Reject installation if Windows Version < 3.1.
  27. '* Sense and handle when insufficient disk space on any paths.
  28. '* 
  29. '*    Rev 1.1   17 Apr 1992 19:16:38   gwh
  30. '* Revised some names, including ProgMan group now "Cakewalk Professional".
  31. '* 
  32. '*    Rev 1.0   17 Apr 1992 17:14:56   pws
  33. '* Initial revision.
  34. '*
  35. '* Copyright (C) 1990- by Greg Hendershott.  All rights reserved.
  36. '**************************************************************************
  37.  
  38. '$INCLUDE 'setupapi.inc'
  39. '$INCLUDE 'msdetect.inc'
  40. '$INCLUDE 'msregdb.inc'
  41.  
  42. ''These should have all been in SETUPAPI.INC.
  43. ''Note that duplicate definitions are errors and so are commented out!
  44.  
  45. 'CONST MB_OK               = &H0000
  46. CONST MB_OKCANCEL         = &H0001
  47. CONST MB_ABORTRETRYIGNORE = &H0002
  48. CONST MB_YESNOCANCEL      = &H0003
  49. CONST MB_YESNO            = &H0004
  50. CONST MB_RETRYCANCEL      = &H0005
  51. CONST MB_TYPEMASK         = &H000F
  52.  
  53. 'CONST MB_ICONHAND         = &H0010
  54. CONST MB_ICONQUESTION     = &H0020
  55. CONST MB_ICONEXCLAMATION  = &H0030
  56. CONST MB_ICONASTERISK     = &H0040
  57. CONST MB_ICONMASK         = &H00F0
  58.  
  59. CONST MB_ICONINFORMATION  = MB_ICONASTERISK
  60. CONST MB_ICONSTOP         = MB_ICONHAND
  61.  
  62. CONST MB_DEFBUTTON1       = &H0000
  63. CONST MB_DEFBUTTON2       = &H0100
  64. CONST MB_DEFBUTTON3       = &H0200
  65. CONST MB_DEFMASK          = &H0F00
  66.  
  67. CONST MB_APPLMODAL        = &H0000
  68. CONST MB_SYSTEMMODAL      = &H1000
  69. 'CONST MB_TASKMODAL        = &H2000
  70.  
  71. CONST MB_NOFOCUS          = &H8000
  72.  
  73. CONST IDOK                = 1
  74. CONST IDCANCEL            = 2
  75. CONST IDABORT             = 3
  76. CONST IDRETRY             = 4
  77. CONST IDIGNORE            = 5
  78. CONST IDYES               = 6
  79. CONST IDNO                = 7
  80.  
  81. ''Dialog ID's
  82. CONST WELCOME                 = 100
  83. CONST ASKQUIT                 = 200
  84. CONST DESTPATH                = 300
  85. CONST EXITFAILURE             = 400
  86. CONST EXITQUIT                = 600
  87. CONST EXITSUCCESS             = 700
  88. CONST APPHELP                 = 900
  89. CONST INI_NOT_OVERWRITTEN     = 1000
  90. CONST PATCHES_NOT_OVERWRITTEN = 1100
  91. CONST EXITSUCCESS_DEMO        = 1200
  92. CONST BADPATH                 = 6400
  93.  
  94. ''Bitmap ID
  95. CONST LOGO = 1
  96.  
  97. GLOBAL COMPANY$
  98. GLOBAL PROGNAME$
  99. GLOBAL PRODUCTNAME$
  100. GLOBAL DEST$        ''Default destination directory.
  101.  
  102. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  103. DECLARE SUB MaybeAssociate (szExt$)
  104.  
  105.  
  106. INIT:
  107.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  108.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  109.     COMPANY$ = "Twelve Tone Systems"
  110.     PROGMANGROUPNAME$ = "Cakewalk Professional"
  111.     INIBASENAME$ = "WINCAKE"
  112.     INFBASENAME$ = "SETUP"
  113.     IF DoesFileExist(GetSymbolValue("STF_SRCDIR") + "WINCAKE.EX_", femExists) <> 0 THEN
  114.         PROGNAME$ = "WINCAKE"
  115.     ELSEIF DoesFileExist(GetSymbolValue("STF_SRCDIR") + "WCWDEMO.EX_", femExists) <> 0 THEN
  116.         PROGNAME$ = "WCWDEMO"
  117.     ELSE
  118.         GOTO ERRQUIT
  119.     END IF
  120.     IF PROGNAME$ = "WINCAKE" THEN
  121.         PRODUCTNAME$ = "Cakewalk Professional"
  122.     ELSEIF PROGNAME$ = "WCWDEMO" THEN
  123.         PRODUCTNAME$ = "Cakewalk Professional Demo"
  124.     END IF
  125.     DEST$ = "C:\WINCAKE"
  126.     winVerReqd$ = "3.1"
  127.  
  128.     SetBitmap CUIDLL$, LOGO
  129.     SetTitle PRODUCTNAME$ + " Setup"
  130.  
  131.     winVer$ = LTRIM$(STR$(GetWindowsMajorVersion())) + "." + LTRIM$(STR$(GetWindowsMinorVersion()))
  132.     IF winVer$ < winVerReqd$ THEN             ''String sort works
  133.         i% = DoMsgBox("Sorry, but your Windows version is "+winVer$+" and "+PRODUCTNAME$+" requires at least Windows "+winVerReqd$+".", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  134.         END
  135.     END IF
  136.  
  137.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  138.     IF szInf$ = "" THEN
  139.         szInf$ = GetSymbolValue("STF_CWDDIR") + INFBASENAME$+".INF"
  140.     END IF
  141.     ReadInfFile szInf$
  142.  
  143.     ''Disk cost list symbols
  144.     FILECOSTS$   = "FileCosts"
  145.     EXTRACOSTS$  = "ExtraCosts"
  146.     STILLNEEDED$ = "StillNeeded"
  147.     FOR i% = 1 TO 26 STEP 1
  148.         AddListItem EXTRACOSTS$, "0"
  149.     NEXT i%
  150.     ''Add extra cost to Windows drive for ini/progman, etc.
  151.     ixWinDrive% = ASC(UCASE$( MID$(GetWindowsDir(), 1, 1) )) - ASC("A") + 1
  152.     ReplaceListItem EXTRACOSTS$, ixWinDrive%, "10240"
  153.  
  154.  
  155. WELCOME:
  156.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  157.     IF sz$ = "CONTINUE" THEN
  158.         UIPop 1
  159.     ELSE
  160.         GOSUB ASKQUIT
  161.         GOTO WELCOME
  162.     END IF
  163.  
  164.  
  165. GETPATH:
  166.     SetSymbolValue "EditTextIn", DEST$
  167.     SetSymbolValue "EditFocus", "END"
  168. GETPATHL1:
  169.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  170.     DEST$ = GetSymbolValue("EditTextOut")
  171.  
  172.     IF sz$ = "CONTINUE" THEN
  173.         IF IsDirWritable(DEST$) = 0 THEN
  174.             GOSUB BADPATH
  175.             GOTO GETPATHL1
  176.         END IF
  177.         UIPop 1
  178.         ixAppDrive% = ASC(UCASE$( MID$(DEST$, 1, 1) )) - ASC("A") + 1
  179.     ELSEIF sz$ = "REACTIVATE" THEN
  180.         GOTO GETPATHL1
  181.     ELSEIF sz$ = "BACK" THEN
  182.         UIPop 1
  183.         GOTO WELCOME
  184.     ELSE
  185.         GOSUB ASKQUIT
  186.         GOTO GETPATH
  187.     END IF
  188.  
  189.  
  190.     GOSUB INSTALL
  191.     IF StillNeed& > 0 THEN
  192.         GOTO GETPATH
  193.     END IF
  194.  
  195.  
  196. QUIT:
  197.     ON ERROR GOTO ERRQUIT
  198.  
  199.     IF ERR = 0 THEN
  200.         IF PROGNAME$ = "WINCAKE" THEN
  201.             dlg% = EXITSUCCESS
  202.         ELSEIF PROGNAME$ = "WCWDEMO" THEN
  203.             dlg% = EXITSUCCESS_DEMO
  204.         END IF
  205.     ELSEIF ERR = STFQUIT THEN
  206.         dlg% = EXITQUIT
  207.     ELSE
  208.         dlg% = EXITFAILURE
  209.     END IF
  210. QUITL1:
  211.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  212.     IF sz$ = "REACTIVATE" THEN
  213.         GOTO QUITL1
  214.     END IF
  215.     UIPop 1
  216.  
  217.     END
  218.  
  219. ERRQUIT:
  220.     i% = DoMsgBox("Installation failure.  Call " + COMPANY$ + " Technical Support", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  221.     END
  222.  
  223.  
  224.  
  225. BADPATH:
  226.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  227.     IF sz$ = "REACTIVATE" THEN
  228.         GOTO BADPATH
  229.     END IF
  230.     UIPop 1
  231.     RETURN
  232.  
  233.  
  234.  
  235. ASKQUIT:
  236.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  237.  
  238.     IF sz$ = "EXIT" THEN
  239.         UIPopAll
  240.         ERROR STFQUIT
  241.     ELSEIF sz$ = "REACTIVATE" THEN
  242.         GOTO ASKQUIT
  243.     ELSE
  244.         UIPop 1
  245.     END IF
  246.     RETURN
  247.  
  248.  
  249.  
  250. '**
  251. '** Purpose:
  252. '**     Builds the copy list and performs all installation operations.
  253. '** Arguments:
  254. '**     none.
  255. '** Returns:
  256. '**     none.
  257. '*************************************************************************
  258. INSTALL:
  259.  
  260.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  261.  
  262.     AddSectionFilesToCopyList "app", SrcDir$, DEST$
  263.     IF PROGNAME$ = "WINCAKE" THEN
  264.         AddSectionFilesToCopyList "pro", SrcDir$, DEST$
  265.     ELSEIF PROGNAME$ = "WCWDEMO" THEN
  266.         AddSectionFilesToCopyList "demo", SrcDir$, DEST$
  267.     END IF
  268.     AddSectionFilesToCopyList "system", SrcDir$, GetWindowsSysDir()
  269.  
  270.     StillNeed& = GetCopyListCost(EXTRACOSTS$, FILECOSTS$, STILLNEEDED$)
  271.     IF StillNeed& > 0 THEN
  272.         ClearCopyList
  273.         FOR ix% = 1 TO 26 STEP 1              ''find first drive that needs space
  274.             need1& = VAL(GetListItem(STILLNEEDED$, ix%))
  275.             IF need1& > 0 THEN
  276.                 GOTO FNDDRV
  277.             END IF
  278.         NEXT ix%
  279.         ix = ixAppDrive                       ''(shouldn't happen)
  280.         need1& = 0
  281.         StillNeed& = 1
  282. FNDDRV:
  283.         need$  = LTRIM$(STR$( (need1&+1023) / 1024 )) + "K bytes"
  284.         cost$  = LTRIM$(STR$( (VAL(GetListItem(FILECOSTS$, ix%))+1023) / 1024 )) + "K"
  285.         drive$ = CHR$(ix% - 1 + ASC("A")) + ":"
  286.         msg$ = "Sorry, "+PRODUCTNAME$+" needs "+need$+" more ("+cost$+" total) on drive "+drive$+".  Clear space or try a new path."
  287.         i% = DoMsgBox(msg$, "Setup Problem", MB_RETRYCANCEL+MB_TASKMODAL+MB_ICONHAND)
  288.         IF i% = IDCANCEL THEN
  289.             GOSUB ASKQUIT
  290.         END IF
  291.         RETURN          ''must RETURN out of GOSUB to pop stack, not just GOTO
  292.     END IF
  293.  
  294.     CreateDir DEST$, cmoNone
  295.  
  296.     OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  297.     WriteToLogFile ""
  298.     WriteToLogFile "User chose as destination directory: '" + DEST$ + "'"
  299.     WriteToLogFile "May have had to create the directory: " + DEST$
  300.     WriteToLogFile ""
  301.  
  302.     CopyFilesInCopyList
  303.  
  304.     SetRegKeyValue PROGNAME$, PRODUCTNAME$
  305.     SetRegKeyValue PROGNAME$+"\shell\print", ""
  306.     SetRegKeyValue PROGNAME$+"\shell\open\command", MakePath(DEST$,PROGNAME$+".EXE") + " %1"
  307.     MaybeAssociate "wrk"
  308.     MaybeAssociate "mid"
  309.     MaybeAssociate "mff"
  310.  
  311.     ini$ = MakePath(DEST$, INIBASENAME$+".INI")
  312.     drm$ = MakePath(DEST$, "DRM.INI")
  313.     IF DoesFileExist(ini$,femExists) = 0 THEN
  314. '       i% = DoMsgBox("Providing you with default "+INIBASENAME$+".INI file.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONINFORMATION)
  315.         CopyFile drm$, ini$, cmoVital, 0
  316.     ELSE
  317.         sz$ = UIStartDlg(CUIDLL$, INI_NOT_OVERWRITTEN, "FInfoDlgProc", 0, "")
  318.         IF sz$ = "EXIT" THEN
  319.             GOSUB ASKQUIT
  320.         ELSE
  321.             UIPop 1
  322.         END IF
  323.     END IF
  324.  
  325.     patches$ = MakePath(DEST$, "PATCHES.INI")
  326.     pat$ = MakePath(DEST$, "PAT.INI")
  327.     IF DoesFileExist(patches$,femExists) = 0 THEN
  328. '       i% = DoMsgBox("Providing you with default PATCHES.INI file.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONINFORMATION)
  329.         CopyFile pat$, patches$, cmoVital, 0
  330.     ELSE
  331.         sz$ = UIStartDlg(CUIDLL$, PATCHES_NOT_OVERWRITTEN, "FInfoDlgProc", 0, "")
  332.         IF sz$ = "EXIT" THEN
  333.             GOSUB ASKQUIT
  334.         ELSE
  335.             UIPop 1
  336.         END IF
  337.     END IF
  338.  
  339.     CreateProgmanGroup PROGMANGROUPNAME$, "", cmoNone
  340.     ShowProgmanGroup  PROGMANGROUPNAME$, 1, cmoNone
  341.     CreateProgmanItem PROGMANGROUPNAME$, PRODUCTNAME$, MakePath(DEST$,PROGNAME$+".EXE"), "", cmoOverwrite
  342.     CreateProgmanItem PROGMANGROUPNAME$, "README.WRI", "write.exe "+MakePath(DEST$,"readme.wri"), "", cmoOverwrite
  343.     WriteToLogFile ""
  344.  
  345.     WriteToLogFile "SUB Install completed."
  346.     CloseLogFile
  347.  
  348.     RETURN
  349.  
  350.  
  351.  
  352. '**
  353. '** Purpose:
  354. '**     Appends a file name to the end of a directory path,
  355. '**     inserting a backslash character as needed.
  356. '** Arguments:
  357. '**     szDir$  - full directory path (with optional ending "\")
  358. '**     szFile$ - filename to append to directory
  359. '** Returns:
  360. '**     Resulting fully qualified path name.
  361. '*************************************************************************
  362. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  363.     IF szDir$ = "" THEN
  364.         MakePath = szFile$
  365.     ELSEIF szFile$ = "" THEN
  366.         MakePath = szDir$
  367.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  368.         MakePath = szDir$ + szFile$
  369.     ELSE
  370.         MakePath = szDir$ + "\" + szFile$
  371.     END IF
  372. END FUNCTION
  373.  
  374.  
  375.  
  376. '**
  377. '** Purpose:
  378. '**     Associates given filetype with us, but asks for user confirmation
  379. '**     if already set to something else.
  380. '** Arguments:
  381. '**     szExt$ - filetype extension, e.g. "mid"
  382. '** Returns:
  383. '**     none.
  384. '*************************************************************************
  385. SUB MaybeAssociate (szExt$) STATIC
  386.     oldProg$ = ""
  387.     ok% = IDYES
  388.  
  389. 'Check Registration Database (overrides WIN.INI [Extensions]).
  390.  
  391.     oldCmd$ = UCASE$( LTRIM$( GetRegKeyValue("."+szExt$+"\shell\open\command") ) )
  392.     IF oldCmd$ = "" THEN    'didn't find direct association, check via prog name
  393.         oldProg$ = LTRIM$( RTRIM$( GetRegKeyValue("."+szExt$) ) )
  394.         IF oldProg$ <> "" THEN
  395.             oldCmd$ = UCASE$( LTRIM$( GetRegKeyValue(oldProg$+"\shell\open\command") ) )
  396.             oldProduct$ = LTRIM$( RTRIM$( GetRegKeyValue(oldProg$) ) )
  397.             IF oldProduct$ <> "" THEN    'long product name found, use it
  398.                 oldProg$ = oldProduct$
  399.             END IF
  400.         END IF
  401.     END IF
  402.     IF oldCmd$ <> "" THEN
  403.         IF INSTR(oldCmd$, PROGNAME$+".EXE") = 0 THEN    'not us, must confirm
  404.             IF oldProg$ = "" THEN   'no short or long name, parse command string
  405.                 j% = INSTR(oldCmd$, " ")
  406.                 IF j% > 1 THEN
  407.                     oldProg$ = MID$(oldCmd$, 1, j%-1)
  408.                 ELSE
  409.                     oldProg$ = oldCmd$
  410.                 END IF
  411.             END IF
  412.         ELSE                            'it's us, clear oldProg$ => no confirm
  413.             oldProg$ = ""
  414.         END IF
  415.         GOTO MAYBE_CONFIRM      'found association, no need to examine WIN.INI
  416.     END IF
  417.  
  418. 'Check WIN.INI [Extensions].
  419.  
  420.     oldCmd$ = UCASE$( LTRIM$( GetIniKeyString("WIN.INI","Extensions",szExt$) ) )
  421.     IF oldCmd$ <> "" THEN
  422.         IF INSTR(oldCmd$, PROGNAME$+".EXE") = 0 THEN    'not us, must confirm
  423.             j% = INSTR(oldCmd$, " ")
  424.             IF j% > 1 THEN
  425.                 oldProg$ = MID$(oldCmd$, 1, j%-1)
  426.             ELSE
  427.                 oldProg$ = oldCmd$
  428.             END IF
  429.         END IF
  430.     END IF
  431.  
  432. 'Get user confirmation if necessary, and do the association if ok.
  433.  
  434. MAYBE_CONFIRM:
  435.     IF oldProg$ <> "" THEN
  436.         ok% = DoMsgBox("."+UCASE$(szExt$)+" files are currently associated with "+oldProg$+".  Switch association to "+PRODUCTNAME$+"?", "Setup Question", MB_YESNO+MB_TASKMODAL+MB_ICONQUESTION)
  437.     END IF
  438.  
  439.     IF ok% = IDYES THEN
  440.         DeleteRegKey   "."+szExt$       'delete all keys for any old direct association
  441.         SetRegKeyValue "."+szExt$, PROGNAME$
  442.         CreateIniKeyValue "WIN.INI", "Extensions", szExt$, MakePath(DEST$,PROGNAME$+".EXE") + " ^." + szExt$, cmoOverwrite
  443.     END IF
  444.  
  445. END SUB
  446.